package excercise;

public class EX01_Q01 {


	public static void main(String[] args) {
		// #01
		System.out.println( "   *    *   " );
		System.out.println( "   *    *   " );
		System.out.println( "   *****   " );
		System.out.println( "   *    *   " );
		System.out.println( "   *    *   " );
		
		//#02
		char name1 = '김';
		char name2 = '혜';
		char name3 = '현';
		float weight = 55.1F;	// 몸무게
		int age = 25;				// 나이
		
		System.out.println( "" + name1 + name2 + name3 );
		System.out.println( weight );
		System.out.println( age );
		
		//#03
		System.out.println( " 3x => 3 * x " );
		System.out.println( " 3x + y => 3 * x + y " );
		System.out.println( " x + y => (x + y) / 7" );
		System.out.println( " ----- " );
		System.out.println( "   7 " );
		System.out.println( " 3x + y => (3 * x + y) / (z + 2)" );
		System.out.println( " ------ " );
		System.out.println( " z + 2 " );
		
		//#04
		double number = (1/3) * 3;
		System.out.println( number );
		// 정수를 정수로 나누면 결과는 정수로 나옴
		// 1/3 의 결과는 일반적으로 0.3333333 이지만
		// 결과는 정수형태가 되므로 최종적으로 0 임
		// 따라서, 1/3 의 결과가 실수가 되어야 함
		// 형변환 연산자인 () 를 이용해서 정수를
		// 실수로 바꾸고 연산식을 실행해야 함
		number = ( (float)1 / 3 ) * 3;
		System.out.println( number );
		
		//#05
		// 나누기/ 연산자와 나머지% 연산자의 차이를 파악
		
		//#06
		// 대입연산자+=, -=, *=, /=, %= 의 용도 파악
		
		//#07 연산자 우선순위
		double x = 2.5;
		double y = -1.5;
		int m = 18;
		int n = 4;
		
		System.out.println( x + n * y - (x + n) * y );
		System.out.println( m / n + m % n );
		System.out.println( 5 * x - n / 5 );
		System.out.println( 1 - ( 1 - ( 1 - ( 1 - ( 1 - n ) ))) );
		
		//#08
		System.out.println( 3 + 4.5 * 2 + 27 / 8 );
		System.out.println( true || false && 3 < 4 || !(5 == 7) );
		System.out.println( true || (3 < 5 && 6 >= 2 ) );
		//System.out.println( !true > 'A' );	// 잘못된 식
		System.out.println( 'Z' > 'A' );
		System.out.println( '0' > 'A' );
		// 문자변수가 산술/관계 연산자의 피연산자로 되면
		// 자동적으로 int 형으로 승격
		// 문자는 일반적으로 ASCII 문자집합의 십진수로 변환
		// 따라서, 문자 A 는 ASCII 문자집합 십진수 65와 같음
		// 문자 z 는 ASCII 문자집합 십진수 122와 같음
		// 문자 0 은 ASCII 문자집합 십진수 48과 같음
		// 또한, 정수를 char 형으로 변환하면
		// ASCII 문자집합의 문자로 출력됨
		System.out.println( (char)63 );
		
		System.out.println( 7 % 4 + 3 - 2 / 6 * 'Z' );
			// 문자 Z는 ASCII 코드의 십진수 122로 인식
		System.out.println( 'D' + 1 + 'M'  % 2 / 3 );
			// 문자 D, M은 ASCII 코드의 십진수 ??,??로 인식
		System.out.println( 5.0 / 3 + 3 / 3 );
		System.out.println( 53 % 21 < 45 / 18 );
		System.out.println( (4 < 6) || true && false || false && (2 > 3) );
		System.out.println( 7 - ( 3 + 8 * 6 + 3 ) - ( 2 + 5 * 2 ) );
	
		//#09
		System.out.print( "May 13, 2013 fell on day number" );
		System.out.println( (( 13 + (13 * 3 - 1) / 5 
				    + 1988 % 100 + 1988 % 100 / 4
				    + 1988 / 400 - 2 
				    * ( 1988 / 100 )) % 7 + 7 ) % 7 );
			// System.out.println() 는 단순하게 문자열을
			// 출력하는 데에 사용할 수 있지만,
			// 수식을 실행하고 그 결과를 출력하는데에도 사용
		System.out.print( "Check out this line  " );
		System.out.println( "//hello there " + '9' + 7 );
		System.out.println( 'H' + 'I' + " is " +  1 + " more example" );
		System.out.println( 'H' + 6.5 + 'I' + " is " +  1 + " more example" );
		//System.out.println( "Print both of us " , " Me too" );
		System.out.println( "Print both of us " + " Me too" );
		System.out.println( "Reverse " + 'I' + 'T' );
		System.out.println( "No! Here is " + 1 + " more example" );
		// System.out.println( "Here is " + 10 * 10 ) // that's 100 ;
		System.out.println( "Here is " + 10 * 10 ); // that's 100
		System.out.println( "Not x is " + true );	// that's true
		// System.out.println();	// 허용, 줄바꿈만 출력
		// System.out.print();	// 오류 발생, 출력내용이 없음
		// System.out.println;	// 오류, 문법적으로 틀림
		// System.out.println( "How about this one " ++ '?' + 'Hur?' );
		System.out.println( "How about this one " + '?' + "Hur?" );
	
		//#10
		System.out.println( true && false && true || true );
		System.out.println( true || true && true && false );
		System.out.println( 
				(true && false) || ( true && ! false ) || (false && !false)  );
		System.out.println( 
				( 2 > 3 ) || ( 5 > 2 ) && !( 4 == 4 ) || 9 != 4 );
		System.out.println( 6 == 9 || 5 < 6 && 8 < 4 || 4 > 3 );
	}	
	
	

}






